package moodle.dados;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.*;

import dao.MoodleDAO;

import moodle.dados.atividades.AtividadeNota;
import moodle.dados.atividades.AtividadeParticipacao;
import moodle.dados.atividades.FerramentaExterna;
import moodle.dados.atividades.Tarefa;
import moodle.dados.grupos.Grupo;

@Entity
@Table(name = "mdl_course")
public class Curso {

	@Id
	private BigInteger id;	
	private String fullname;
	private Long timecreated;
	@Transient
	private Tutor tutor;
	@Transient
	private Set<Aluno> alunos;
	@Transient
	private Set<AtividadeNota> atividadesNota;
	@Transient
	private Set<AtividadeParticipacao> atividadesParticipacao;
	@Transient
	private BigInteger itemid;
	@Transient 
	private Map<Aluno, BigDecimal> notaGeralAlunos;
	@Transient
	private Collection<Curso> cursosPreRequisito; 
	@Transient
	private Collection<Grupo> grupos;	
	
	public Curso(){
		alunos = new HashSet<Aluno>();
		atividadesNota = new HashSet<AtividadeNota>();
		atividadesParticipacao = new HashSet<AtividadeParticipacao>();
		grupos = new HashSet<Grupo>();
		notaGeralAlunos = new HashMap<Aluno, BigDecimal>();
		cursosPreRequisito = new HashSet<Curso>();
	}
	
	public Tutor getTutor(){
		return tutor;
	}
	
	public void addTutor(Tutor tutor){
		this.tutor = tutor;
	}
	
	public BigInteger getId() {
		return id;
	}
	
	public String getFullName() {
		return fullname;
	}
	
	public Set<Aluno> getAlunos(){
		return alunos;
	}
	
	public void addAluno(Aluno aluno){
		alunos.add(aluno);
	}
	
	public void setItemid(BigInteger itemid){
		this.itemid = itemid;
	}
	
	public BigInteger getItemid(){
		return itemid;
	}
	
	public void addAtividadeNota(AtividadeNota atividade){
		atividadesNota.add(atividade);
	}
	
	public void addAtividadeNota(List<? extends AtividadeNota> atividades){
		atividadesNota.addAll(atividades);
	}
	
	
	public void addAtividadeParticipacao(AtividadeParticipacao atividade){
		atividadesParticipacao.add(atividade);
	}
	
	public void addAtividadeParticipacao(List<? extends AtividadeParticipacao> atividades){
		atividadesParticipacao.addAll(atividades);
	}

	public Set<AtividadeNota> getAtividadesNota() {
		return atividadesNota;
	}
	
	public Set<AtividadeParticipacao> getAtividadesParticipacao() {
		return atividadesParticipacao;
	}
	
	public Set<Atividade> getAllAtividades(){
		Set<Atividade> all =  new HashSet<Atividade>();
	
		all.addAll(atividadesParticipacao);
		all.addAll(atividadesNota);
		
		return all;
	}
	
	public Collection<Grupo> getGrupos(){
		return grupos;
	}
	
	public void addGrupo(Grupo grupo){
		grupos.add(grupo);
	}
	
	public void addGrupo(Collection<Grupo> grupos){
		this.grupos.addAll(grupos);
	}
	
	public Map<Aluno, BigDecimal> getNotaGeralAlunos(){
		return notaGeralAlunos;
	}
	
	public Collection<Curso> getCursosPreRequisito(){
		return cursosPreRequisito;
	}

	public Date getDataCriacao(){
		long milisec = 1000;
		return new Date(timecreated*milisec); 
	}
	

}